package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_917_仅仅反转字母 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_917_仅仅反转字母().new Solution();
        System.out.println(solution.reverseOnlyLetters("ab-cd"));
    }

    /**
     题目：给你一个字符串 s ，根据下述规则反转字符串：
         所有非英文字母保留在原有位置。
         所有英文字母（小写或大写）位置反转。
         返回反转后的 s 。

     示例 1：
     输入：s = "ab-cd"
     输出："dc-ba"

     示例 2：
     输入：s = "a-bC-dEf-ghIj"
     输出："j-Ih-gfE-dCba"

     示例 3：
     输入：s = "Test1ng-Leet=code-Q!"
     输出："Qedo1ct-eeLg=ntse-T!"

     分析：【P 💖】
        1.左右指针：分别找到左右字母交换位置
            --执行耗时:0 ms,击败了100.00% 的Java用户
            --编码耗时:[12:17]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String reverseOnlyLetters(String s) {
        char[] chars = s.toCharArray();
        int left=0,right=chars.length-1;
        while (left<right){
            while ((chars[left]<65 || (chars[left]>90 && chars[left]<97 ))&& left<right)
                left++;
            while ((chars[right]<65 ||(chars[right]>90 && chars[right]<97 )) && left<right)
                right--;
            if(left<right){
                char temp =chars[left];
                chars[left++] = chars[right];
                chars[right--] = temp;
            }
        }
        return String.valueOf(chars);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}